class Solution {
public:
    vector<int> maxInWindows(vector<int>& num, int size) {
       //这个题目的解题思路为使用一个双端队列来记录所有的可能最大值的下标，记录下标是为了方便删除已经
       //失效的元素，
       vector<int> ret;
       if(num.size() ==0||size<=0||size>num.size())
       {
            return ret;
       }//处理特殊的情况
       int right = 0;
       deque<int> max;//记录所有可能的最大值
       for(;right<num.size();right++)
       {
            // 移除队列中所有小于当前元素的索引
            while (!max.empty() && num[max.back()] < num[right]) {
                max.pop_back();
            }
            max.push_back(right);//将可能的最大值放入到双端队列中
            //检测是否存在失效的元素
            while(right-size>=max.front())
            {
                max.pop_front();
            }
            //记录当前的最大值
            if(right>=size-1)
            {
                ret.push_back(num[max.front()]);
            }
       }
       return ret;
    }
};